#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"
#include "Kernel/LoCos.h"
//Locos control os
/* 任务一*/
EventParameter_struct *event1;
void event1_exeFun(EnableType_enum sta){
    if(sta){
        printf("event1 running!\n");
    }
    else{
        printf("event1 stop!\n");
    }
}
void event1_triggerFun(void){  
  
}
/* 任务2*/
EventParameter_struct *event2;
void event2_exeFun(EnableType_enum sta){
    if(sta){
        printf("event2 running!\n");
    }
    else{
        printf("event2 stop!\n");
    }
}
void event2_triggerFun(void){  
  
}
/* 任务3*/
EventParameter_struct *event3;
taskcnt event3_junior[2]={1,2};
void event3_exeFun(EnableType_enum sta){
    if(sta){
        printf("event3 running!\n");
    }
    else{
        printf("event3 stop!\n");
    }
}
void event3_triggerFun(void){  
  
}
/* 任务4*/
EventParameter_struct *event4;
taskcnt event4_senior[2]={1,1};
void event4_exeFun(EnableType_enum sta){
    if(sta){
        printf("event4 running!\n");
    }
    else{
        printf("event4 stop!\n");
    }
}
void event4_triggerFun(void){  
  
}

void main(){
    //LoCos
    /*一.初始化(主要是申请空间，及链表)*/
    LocosInit();
    /*二.要注册任务*/
    //需要输入：事件结构体（二级指针）、触发事件、执行（enable、disable）函数、父执行级、子执行级
    RegisterTask(&event1,event1_exeFun,event1_triggerFun,1,NULL,NULL);
    RegisterTask(&event2,event2_exeFun,event2_triggerFun,2,NULL,NULL);
    RegisterTask(&event3,event3_exeFun,event3_triggerFun,3,NULL,event3_junior);
    RegisterTask(&event4,event4_exeFun,event4_triggerFun,4,event4_senior,NULL);
    /*三.执行系统*/
    while(1){
        LocosListen();//没有写成内死循环是为了：方便添加用户程序
        /*用户程序*/

        /*       */
    }
    
}

/*二.状态机监测触发事件（死循环）*/
    /* 1.若触发事件，判断是否有父执行级在运行*/
        /*1）若在运行，释放触发标志,进行下一事件扫描*/
        /*2）不在运行，判断是否存在子执行级，或是否使能*/
            /*1））存在，遍历子执行级 先后释放列表：释放先行子执行级，运行此事件执行函数，释放后行子执行级*/
            /*2））不存在：运行此事件执行函数；
        /*3）进行下一事件扫描*/